package com.acme.bankapp.domain.bank;

import java.io.Serializable;

/**
 * interface {@code Account} provides common operations with client' Account
 * @author Artem Nikitin
 *
 */
public interface Account extends Serializable {
	
	/**
	 * Piles up the balance of this account
	 * @param amount - amount of funds to pile up
	 */
	void deposit(double amount);

	/**
	 * Withdraw specified amount of funds
	 * @param amount
	 * @throws NotEnoughFundsException
	 */
	void withdraw(double amount) throws NotEnoughFundsException;
	
	/**
	 * Returns current balance
	 * @return
	 */
	double getBalance();
	
	double maxAmountToWithdraw();
	
	/**
	 * Returns rounded balance.
	 * @return integer value of balance
	 */
	long decimalValue();
}
